#include "myserial.h"
#include "L4686SDK.h"	
#include <iostream>

static char stringa[10];
static char lettura[255];

int controllo_ACK(void)
{
	char ACK[7]="*#*1##";
	char NACK[7]="*#*0##";
	bool flag_axt;
	int rd,mem;
	DWORD diff, now, begin;

	begin = GetTickCount();
	flag_axt=false;
	mem=0;
	memset(lettura,0,255);

	do
	{
		now = GetTickCount();
		diff = now-begin;
		rd=serial_read(&lettura[mem],1);
		
		if (flag_axt==false)
		{
			if (lettura[mem]=='*')
			{
				flag_axt=true;
				mem++;
			}
		}
		else if (flag_axt==true)
			mem++;
		Sleep(1);
	}while ((strcmp(&lettura[0],ACK)) && (strcmp(&lettura[0],NACK)) && (diff<3000));
	if ((diff>=3000))
		return -1;
	else
	{	
		if (strcmp(lettura,ACK)==0)
		{
			return 0;
		}
		return 1;
	}
}
		
int on_luce (int indirizzo)
{
	sprintf(stringa,"*1*1*%d##",indirizzo);
	serial_write(stringa);
	return 0;
}	

int off_luce (int indirizzo)
{
	sprintf(stringa,"*1*0*%d##",indirizzo);
	serial_write(stringa);
	return 0;
}

int tapparella (int indirizzo)
{
	sprintf(stringa,"*1*29*%d##",indirizzo); // 29 indica che il rele' e' on per 5 secondi
	serial_write(stringa);
	return 0;	
}

int on_scen (int num, int indirizzo)
{
	sprintf(stringa,"*0*%d*%d##",num,indirizzo); 
	serial_write(stringa);
	return 0;
}

int on_prog_scen (int num, int indirizzo)
{
	sprintf(stringa,"*0*44*%d##",indirizzo);	//Sblocca il modulo scenario
	serial_write(stringa);
	sprintf(stringa,"*0*40#%d*%d##",num,indirizzo); 
	serial_write(stringa);
	return 0;	
}

int off_prog_scen (int num, int indirizzo)
{
	sprintf(stringa,"*0*41#%d*%d##",num,indirizzo); 
	serial_write(stringa);
	return 0;
}

int del_all_scen (int indirizzo)
{
	sprintf(stringa,"*0*42*%d##",indirizzo);
	serial_write(stringa);
	return 0;
}

int del_scen (int num, int indirizzo)
{
	sprintf(stringa,"*0*42#%d*%d##",num,indirizzo); 
	serial_write(stringa);
	return 0;//
				
}

int on_gruppo (int num_gruppo)
{
	sprintf(stringa,"*1*1*#%d##",num_gruppo); 
	serial_write(stringa);
	return 0;
}

int off_gruppo (int num_gruppo)
{
	sprintf(stringa,"*1*0*#%d##",num_gruppo); 
	serial_write(stringa);
	return 0;		
}

int on_luce_scala (int indirizzo)
{
	sprintf(stringa,"*1*15*%d##",indirizzo);
	serial_write(stringa);
	return 0;		
}	

int leggi_stato (char* buf, int indirizzo)
{
	int rd;
	size_t dim = 9;

	clean_buffer();
	sprintf(stringa,"*#1*%d##",indirizzo);
	serial_write(stringa);
	if (controllo_ACK()==0)
	{
		rd=serial_read(&buf[0],dim);
	}
	else
		rd=-1;
	return rd;	
}

int leggi_stato_gruppo (char* buf, int indirizzo)
{
	int rd;
	size_t dim = 9;

	clean_buffer();
	sprintf(stringa,"*#1*#%d##",indirizzo);
	serial_write(stringa);
	if (controllo_ACK()==0){
		rd=serial_read(&buf[0],dim);
	}
	else
		rd=-1;
	return rd;	
}

int connessione()
{
	int risposta;

	sprintf(stringa,"*13*20##"); 
	serial_write(stringa);
	risposta = controllo_ACK();
	if (risposta==0) 
	{
		sprintf(stringa,"*13*21##"); 
		serial_write(stringa);
		return 0;
	}
	else
		return -1;
}

